A typical resource-constrained environment, such as a smart card or similar execution environment or device, may have limited random access memory resources, and instead use persistent memory as a default location for creating and storing software objects.
Such environments have a need for reclaiming persistent memory which is in use by objects that have become garbage by virtue of being nonreachable from a defined set of roots. Garbage collection algorithms which may be useful in other environments, such as Java SE, often rely on techniques such as moving or marking the objects directly. However, these techniques are not as useful in a resource-constrained, smart card, or similar execution environment, since moving or marking objects in persistent memory is a time-consuming, and potentially damaging, operation given that only a limited number of data writes can be made to a persistent memory device before it wears out.